判断一棵树是否为满二叉树

首先,我们要知道什么是满二叉树。一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树。这个概念很好理解。

那么,我们要怎么判断一棵树是否为满二叉树呢?

思路:在层序遍历的过程中,找到第一个非满节点(non-full node)。满节点(full-node)指的是同时拥有左右孩子的节点。在找到第一个非满节点之后,剩下的节点不应该有孩子节点;如果有,那么该二叉树就不是完全二叉树。

<span style="font-size:18px;">bool isCompleteTree(Node* root){
    queue<Node*> que;  
    que.push(root);  
    bool flag = false; 
    while(!que.empty()){  
        Node* temp = que.front();  
        que.pop();  
        if(flag){  
            if(temp->left || temp->right)    // 
                return false;  
        }  
        else{  
            if(temp->left && temp->right)   //左右孩子同时存在,则压入队列
            {  
                que.push(temp->left);  
                que.push(temp->right);  
            }  
            else if(temp->right)   //如果只存在右孩子,则,一定不满足满二叉树
                return false;  
            else if(temp->left)  
            {  
                que.push(temp->left);  //改变标志位
                flag = true;  
            }  
            else  
                flag = true;  
        }  
    }  
    return true;  
}  </span>


网友还曾说,可以根据完全二叉树的定义,左边的深度>=右边的深度。从根节点开始,分别沿着最左最右分支下去,找到最左和最右的深度。如果左边比右边深1,再分别检查以左儿子和右儿子为根的两根树。但是尝试了几遍,感觉不对,但是,读者可以自己寻找。



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值